# 1、字符串编码的转换
# a = 'hello'
# a1 = a.encode()  # 编码
# print('编码后：', a1)
# print('类型变为：', type(a1))
# a2 = a1.decode()
# print('解码后：', a2)
# print('类型变为：', type(a2))

st = '这是六星教育'
st1 = st.encode('utf-8')
print(type(st1))
st2 = st1.decode('utf-8')
print(st2)

# 2、字符串常见操作
# 2.1、字符串拼接
# print("10" + "10")
# print("六星" , "教育")
# print("六星" , "教育", sep="")  # 去掉六星 与 教育 之间的空格

# 2.2 * 重复输出 *5表示重复输出次数为5次
print("好好学习，天天向上。" * 5)

# 2.3、成员运算符
# 作用：检查字符串中是否包含了某个子字符串，可以是一个次方也可以是多个字符
# in 如果包含，返回True，不包含返回False
# not in 如果不包含返回True，包含则返回False
name = 'bingbing'
print('bing' in name)  # 可以是一个次方也可以是多个字符
print('bing' not in name)
name = "冰冰"
print('冰' in name)

# 2.4、下标
# 作用：通过下标可以快速找到对应的数据
# name = 'sixstar'
# print(name[0])
# print(name[1])
# print(name[2])
# print(name[3])
# print(name[4])
# print(name[5])
# print(name[6])
# 从右往左数，下标从-1开始，-1、-2
# print('从右往左数')
# print(name[-1])
# print(name[-2])

# 2.4、切片
# 作用：指对操作的对象截取其中一部分的操作
# 语法：[开始位置，结束位置，步长]
# 注意：也遵循左闭右开原则

st = 'abcdefghijk'
print(st[0:3])  # abc  结束位置为 3-1=2
print(st[0:4])  # abcd
print(st[4:7])  # efg
print(st[3:])  # defghijk
print(st[:7])  # defghijk  7以前的全截取到，不包含7

print('从右往左数')
print(st[-1:-5])  # 什么都不输出，默认步长为1，因此无法切到到-5的那个范围，切取方向要一致才可以
print(st[-1:-5:-1])  # 把步长设置为-1，才可以切到

# 2.5、字符串常见操作
# 2.5.1、find 检测字符是否包含在另一个字符中
# 格式：find(子字符串，开始位置下标，结束位置下标) 开始位置下标 与 结束位置下标可以省略
name = "nick"
print(name.find('ck'))  # 返回第一个ck出现的开始位置
print(name.find('ck', 3, 4))  # 包前不包后  指定了开始位置与结束位置
# 2.5.2、与index一样，但是找不到会报异常
# 格式：index(子字符串，开始位置下标，结束位置下标) 开始位置下标 与 结束位置下标可以省略
name = "我命由我不由天"
print(name.index('命'))
# print(name.index('命', 2)) # 从下标2开始找
print(name.index('命', 1, 3))  # 从下标1到3开始找
# 2.5.3、count 返回某个子字符串在整个字符串中出现的次数
# count(子字符串，开始位置下标，结束位置下标) 开始位置下标 与 结束位置下标可以省略
print(name.count('由'))  # 2次
# 2.5.4、replace 替换
name1 = "好好学习，天天向上！"
print(name1.replace('天', '时'))  # 默认全部替换
print(name1.replace('天', '时', 1))  # 只替换一次
# 2.5.5、split 分割
st2 = 'hello,python'
print(st2.split(','))  # ['hello', 'python']  以列表的形式返回
print(st2.split('o', 1))  # ['hell', ',python']  指定只分割一次
# 2.5.6、startswith 判断是否以指定字符开头
# 2.5.7、endswith 判断是否以指定字符开头
# 2.5.8、isupper 判断字符串是否全都为大写
str1 = 'sixstar'
print(str1.isupper())
print("SIX".isupper())
# 2.5.9、capitalize() 指定第一个字符大写
st3 = "bingbing"
print(st3.capitalize())

# 2.5.10、lower() 大写字符转为小写
st4 = 'bIngBinG'
print(st4.lower())
# 2.5.11、upper() 大写字符转为小写
st5 = 'bIngBinG'
print(st5.upper())
